package Control;

import DAO.EspacoDAO;
import DAO.EspacoRecursoDAO;
import DAO.RecursoDAO;
import Model.Espaco;
import Model.Recurso;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;

/**
 *
 * @author 0433101
 */
public class cadastraEspaco extends Processor {

    @Override
    public void execute() throws ServletException, IOException {
        PrintWriter out = getResponse().getWriter();
        getResponse().setContentType("text/html;charset=UTF-8");
        try{
            //Criar espaco
            String n = getRequest().getParameter("numSala");
            String end = getRequest().getParameter("endereco");
            String cap = getRequest().getParameter("capacidade");
            String descricao = getRequest().getParameter("descricao");
            String tipo = getRequest().getParameter("tipoEspaco");
            
            if(n == null || end == null || cap == null || descricao == null || tipo == null){
                throw new ServletException();
            }
            
            if(n.equals("") || cap.equals("") || tipo.equals("")){
                out.println("<div> Campos devem ser preenchidos! </div>");
                RequestDispatcher rd = getRequest().getRequestDispatcher("cadastrarEspaco.jsp");
                rd.include(getRequest(), getResponse());
            }
            
            int num = Integer.parseInt(n);
            int capacidade = Integer.parseInt(cap);
            int tipoEspaco = Integer.parseInt(tipo);
            int id_endereco = Integer.parseInt(end);
            
            if(num < 0 || capacidade < 0 || id_endereco < 0){
                out.println("<div> Números devem ser positivos! </div>");
                RequestDispatcher rd = getRequest().getRequestDispatcher("cadastrarEspaco.jsp");
                rd.include(getRequest(), getResponse());
            }
            
            //criar Espaco
            boolean valido = EspacoDAO.inserir(id_endereco, capacidade, tipoEspaco, descricao, num);
            if(!valido){
                out.println("<div> Parâmetros inválidos ou Espaço já existe! </div>");
                RequestDispatcher rd = getRequest().getRequestDispatcher("cadastrarEspaco.jsp");
                rd.include(getRequest(), getResponse());
            }
            Espaco espaco = EspacoDAO.PesquisarByNumEndereco(num, id_endereco);
            
            //incluir equipamentos em espaco
            String[] r = getRequest().getParameterValues("recurso");
            for(int i = 0 ; i < r.length ; i++){
                String atual = r[i];
                Recurso recurso = RecursoDAO.pesquisarByNome(atual);
                if(recurso.getQuantidade_disponivel() != -1){
                    String q = getRequest().getParameter("quantidade_" + recurso.getNome_recurso());
                    //out.println("quantidade_" + recurso.getId_recurso() + " = " + q + " quantidade<br>");
                    int quantidade = Integer.parseInt(q);
                    if(quantidade < 0){
                        out.println("<div> Número deve ser positivo! </div>");
                        RequestDispatcher rd = getRequest().getRequestDispatcher("cadastrarEspaco.jsp");
                        rd.include(getRequest(), getResponse());                        
                    }
                    //incluir em sala recurso, diminuir de recurso
                    boolean autorizado = RecursoDAO.diminuirRecurso(recurso.getId_recurso(), quantidade);
                    if(autorizado){
                        EspacoRecursoDAO.inserir(espaco.getId_espaco(), recurso.getId_recurso(), quantidade);
                    }
                    else{
                        out.println("<div> Quantidade de recurso requerida não disponível! </div>");
                        RequestDispatcher rd = getRequest().getRequestDispatcher("cadastrarEspaco.jsp");
                        rd.include(getRequest(), getResponse()); 
                    }
                }else{
                    EspacoRecursoDAO.inserir(espaco.getId_espaco(), recurso.getId_recurso(), -1);
                }
            }                
            
            out.println("<div> Espaço cadastrado com sucesso! </div>");
            RequestDispatcher rd = getRequest().getRequestDispatcher("menuAdministrador.jsp");
            rd.include(getRequest(), getResponse());            
        }
        catch(SQLException e){
            throw new ServletException(e); 
        }
        catch(ClassNotFoundException e){
            throw new ServletException(e);
        }
        catch(NumberFormatException e){
            out.println("<div> Número inválido! </div>");
            RequestDispatcher rd = getRequest().getRequestDispatcher("cadastrarEspaco.jsp");
            rd.include(getRequest(), getResponse());                    
        }
    }
    
}
